import type { DateLib } from "../classes/DateLib.js";

/**
 * Generates a series of 7 days, starting from the beginning of the week, to use
 * for formatting weekday names (e.g., Monday, Tuesday, etc.).
 *
 * @param dateLib The date library to use for date manipulation.
 * @param ISOWeek Whether to use ISO week numbering (weeks start on Monday).
 * @param broadcastCalendar Whether to use the broadcast calendar (weeks start
 *   on Monday, but may include adjustments for broadcast-specific rules).
 * @returns An array of 7 dates representing the weekdays.
 */
export function getWeekdays(
  dateLib: DateLib,
  ISOWeek?: boolean | undefined,
  broadcastCalendar?: boolean | undefined,
  today?: Date,
): Date[] {
  const referenceToday = today ?? dateLib.today();

  const start = broadcastCalendar
    ? dateLib.startOfBroadcastWeek(referenceToday, dateLib)
    : ISOWeek
      ? dateLib.startOfISOWeek(referenceToday)
      : dateLib.startOfWeek(referenceToday);

  const days: Date[] = [];
  for (let i = 0; i < 7; i++) {
    const day = dateLib.addDays(start, i);
    days.push(day);
  }
  return days;
}
